In a cloud computing environment, computing is delivered as a service rather than a product, whereby shared resources, software and information are provided to computers and other devices as a metered service over a network, such as the Internet. In such an environment, computation, software, data access and storage services are provided to users that do not require knowledge of the physical location and configuration of the system that delivers the services.
In computer networking, the transport layer provides end-to-end communication services for applications within a layered architecture of network components and protocols. The transport layer provides convenient services, such as connection-oriented data stream support, reliability, flow control and multiplexing. Examples of transport protocols include the Transmission Control Protocol (TCP) and the Virtual Machine Communication Interface (VMCI) protocol. The VMCI is an infrastructure that provides fast and efficient communication between a virtual machine and the host operating system and between two or more virtual machines on the same host (i.e., the same physical real computer). VMCI is advantageous over TCP in that the throughput for VMCI may be significantly greater than the throughput for TCP/IP. However, there are some limitations in using VMCI.
For example, in order to implement the VMCI protocol, the application developer needs to make code modifications to make the application aware of the VMCI protocol. Such a requirement to make code modifications is a hindrance to enterprise level adoption due to the high cost of re-testing.
Furthermore, in a virtualized computer environment, such as may be implemented in a cloud computing node of the cloud computing environment, the VMCI protocol only provides communication within the local hypervisor. In a virtualized computer, the computer includes a virtual operating system. The virtual operating system includes a common base portion and separate user portions that all run on a physical computer. The physical computer is referred to as a host. The common base portion may be referred to as a hypervisor and each user portion may be called a guest. Each guest is a logical partition of physical resources of the computer. A guest operating system runs on each guest, and the guest appears to the guest operating system as a real computer. Each guest operating system may host one or more virtual machines.
Since the VMCI protocol only provides communication within the local hypervisor, the VMCI sockets (socket provides a bidirectional communication endpoint for sending and receiving data with another socket) only communicate from guest to guest as well as between a guest to a host on a single host. VMCI sockets cannot be used for communicating between virtual machines running on two separate physical machines or from one host to another host across a network. Instead, the application has to rely upon TCP/IP to communicate with external hosts.
Since the application layer (application layer contains all protocols and methods that fall into the realm of process-to-process communications) does not have visibility to the underlying virtual infrastructure to determine whether it should communicate over VMCI (if communicating on the same host) or over TCP (if communicating over a different host), the application resorts to using TCP since virtual machines can migrate to new hosts as workload demands change.
As a result, despite the benefits of using the VMCI protocol over the TCP protocol, the use of the VMCI protocol in a virtualized computer environment in a cloud computing node of the cloud computing environment is currently impractical.